"""
@author: haha
@file: user.py
@time: 2023/3/7 0007 10:57:24
"""
from wtforms import Form, StringField
from wtforms.validators import DataRequired, Email, Regexp, ValidationError
from model.userdb.userinfo import User
from werkzeug.security import check_password_hash

class UserForm(Form):
    #对客户端传递过来的username， email， password， phone进行校验
    #变量名需要和客户端传递的字段名一致
    username = StringField(validators=[DataRequired()])
    # email = StringField(validators=[DataRequired(), Email(message="邮箱不合法")])
    password = StringField(validators=[DataRequired(), Regexp(r'\w{6,18}', message="密码不符合要求")])
    # phone = StringField(validators=[DataRequired(), Regexp(r'1\d{10}', message="电话不符合要求")])

    #自定义验证器，验证邮箱是否唯一
    #自定义检查字段 方法名：validate_你要检查的字段
    #value  客户端传递过来的email对象
    # def validate_email(self, value):
    #     if User.query.filter_by(email=value.data).first():
    #         raise ValidationError("邮箱已存在")

    def validate_username(self, value):
        if User.query.filter_by(username=value.data).first():
            raise ValidationError("用户名已存在")

    # def validate_username(self, value):
    #     #对数据进行修改，给客户端传进来的所有用户名都加一个sanchuang-开头
    #     value.data = "sanchuang-" + value.data

class LoginForm(Form):
    # userName = StringField(validators=[DataRequired(), Email(message="邮箱不合法")])
    username = StringField(validators=[DataRequired()])
    password = StringField(validators=[DataRequired(), Regexp(r'\w{6,18}', message="密码不符合要求")])

    def validate(self):
        #调用父类validate 去验证输入的userName, password是否合法
        super().validate()
        #如果输入不合法 self.errors就不为None， 就会为真，直接返回False 验证失败
        if self.errors:
            return False
        user = User.query.filter_by(username=self.username.data).first()
        #如果用户存在 并且密码验证通过
        if user and check_password_hash(user.password, self.password.data):
            return user
        else:
            raise ValidationError("用户名错误，验证失败！")